<?php
/**
*
* example目录下为简单的支付样例，仅能用于搭建快速体验微信支付使用
* 样例的作用仅限于指导如何使用sdk，在安全上面仅做了简单处理， 复制使用样例代码时请慎重
* 请勿直接直接使用样例对外提供服务
* 
**/

require_once __DIR__."/WxPay.Config.php";

//初始化日志
$logHandler= new CLogFileHandler(date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);

class NativeNotifyCallBack extends WxPayNotify
{
	/**
	*
	* 回包前的回调方法
	* 业务可以继承该方法，打印日志方便定位
	* @param string $xmlData 返回的xml参数
	*
	**/
	public function LogAfterProcess($xmlData)
	{
		Log::DEBUG("call back， return xml:" . $xmlData);
		return;
	}
	
	/**
	 * @param WxPayNotifyResults $objData 回调解释出的参数
	 * @param WxPayConfigInterface $config
	 * @param string $msg 如果回调处理失败，可以将错误信息输出到该方法
	 * @return true回调出来完成不需要继续回调，false回调处理未完成需要继续回调
	 */
	public function NotifyProcess($objData, $config, &$msg)
	{
		$data = $objData->GetValues();
		//echo "处理回调";
		Log::DEBUG("call back:" . json_encode($data));
		//TODO 1、进行参数校验
		if(!array_key_exists("openid", $data)) // || !array_key_exists("product_id", $data)
		{
			$msg = "回调数据异常";
			Log::DEBUG($msg  . json_encode($data));
			return false;
		}

		//TODO 2、进行签名验证
		try {
			$checkResult = $objData->CheckSign($config);
			if($checkResult == false){
				//签名错误
				Log::ERROR("签名错误...");
				return false;
			}
		} catch(Exception $e) {
			Log::ERROR(json_encode($e));
		}

		//TODO 3、处理业务逻辑
		$openid = $data["openid"];
		$attach = $data["attach"]; // $attach = "$kstr@$kenc";
		$atemp = explode('@', $attach);
		if(!empty($atemp[1]) && \imcat\comConvert::sysEncode($atemp[0])==$atemp[1]){
		    $kar = \imcat\glbDBExt::dbAutID('plus_paylog');
		    $fee = round($data["total_fee"]/100,2);
		    $rlog = ['kid'=>$kar[0], 'ordid'=>$data["out_trade_no"], 'apino'=>$data["transaction_id"], 'amount'=>$fee, 'api'=>'wepv3',
		        'ufrom'=>$openid, 'uto'=>'', 'stat'=>'success', 'atime'=>time()]; 
		    // kid  ordid   apino   amount  api stat    ufrom   uto expar
		    db()->table('plus_paylog')->data($rlog)->insert();
			return true;
		}else{
			$msg = "统一下单失败";
		 	Log::DEBUG($msg  . json_encode($data));
		 	return false;
		}
		//$product_id = $data["product_id"];
		/*/统一下单
		$this->SetData("appid", $result["appid"]);
		$this->SetData("mch_id", $result["mch_id"]);
		$this->SetData("nonce_str", WxPayApi::getNonceStr());
		$this->SetData("prepay_id", $result["prepay_id"]);
		$this->SetData("result_code", "SUCCESS");
		$this->SetData("err_code_des", "OK");
		*/

		return true;
	}
}

$config = new WxPayConfig();
Log::DEBUG("begin notify!");
$notify = new NativeNotifyCallBack();
$notify->Handle($config, true);

